package main

import (
	"fmt"
)

/*
用户注册登录系统
欢迎进入xx系统
1、注册
   用户名
   密码
   年龄
   地址
2、登录
   用户名
   密码
*/
//面向过程的编程  -- 思维模式  做什么事情，实现功能
//面向对象的编程  -- 着重于谁去做
//结构体设定  -- 属性、方法
//后续 维护管理 迭代更新都方便很多

type User struct {
	UserName    string
	UserPasswd  string
	UserAddress string
	UserAge     string
}

type System struct {
	SysName  string
	SysUsers map[string]User
}

//绑定登录注册方法
//接受用户名、密码等等参数， 返回error

func main() {
	sys1 := System{
		SysName:  "购物系统",
		SysUsers: map[string]User{},
	}
	sys2 := System{
		SysName:  "生鲜系统",
		SysUsers: map[string]User{},
	}
	for {
		fmt.Println("1、购物系统\n2、生鲜系统\n3、退出")
		var sysChoice int
		fmt.Scan(&sysChoice)

		var sys System
		if sysChoice == 1 {
			sys = sys1
		} else if sysChoice == 2 {
			sys = sys2
		} else if sysChoice == 3 {
			fmt.Println("退出系统")
			return
		}

		var choice int
		fmt.Println("欢迎进入", sys.SysName)
		fmt.Println("1、注册\n2、登录\n3、退出\n4、查询")
		fmt.Println("请输入你的选择：")
		fmt.Scan(&choice)
		switch choice {
		case 1:
			var user User
			var name, address, passwd, age string
			fmt.Println("欢迎来到注册页面")
			fmt.Println("请输入用户名:")
			_, _ = fmt.Scan(&name)
			fmt.Println("请输入密码:")
			_, _ = fmt.Scan(&passwd)
			fmt.Println("请输入地址:")
			_, _ = fmt.Scan(&address)
			fmt.Println("请输入年龄:")
			_, _ = fmt.Scan(&age)
			user = User{
				name,
				passwd,
				address,
				age,
			}
			sys.SysUsers[name] = user
		case 2:
			var name, passwd string
			fmt.Println("请输入用户名:")
			fmt.Scan(&name)
			fmt.Println("请输入密码:")
			fmt.Scan(&passwd)
			for k, v := range sys.SysUsers {
				if k == name {
					if v.UserPasswd == passwd {
						fmt.Println("登录成功")
						break
					} else {
						fmt.Println("密码错误")
						break
					}
				} else {
					fmt.Println("用户不存在")
				}
			}
		case 3:
			fmt.Println("退出系统")
			return
		case 4:
			fmt.Println(sys)
		}
	}
}
